package com.wlyy.bcwlw.common.utils;

import org.directwebremoting.annotations.DataTransferObject;

/**
 * 
 * @ClassName. PageUtil
 * @Description. 分页工具
 * @author zhangyang
 * @date 2015年9月13日 上午9:57:39
 * @version V1.0
 */
@DataTransferObject
public class PageUtil {

	/** 当前页号. */
	private int pagenum;
	
	/** 查出的总记录数. */
	private int size;
	
	/** 每页显示多少条记录. */
	private int rowCount;
	
	/** 总页数. */
	private int pageCount;
	
	/** 首页页号. */
	private int first = 1;
	
	/** 末页页号. */
	private int last;
	
	/** 前一页页号. */
	private int prev;
	
	/** 后一页页号. */
	private int next;
	
	/** 当前页查询时的起始记录数. */
	private int startRow;
	
	/** 页面上显示出来的页号的起始页号. */
	private int start;
	
	/** 页面上显示出来的页号的最后页号. */
	private int end;
	
	/** 每页显示出来的有几个页号. */
	private int pagenumCount = 6;
	
	/**
	 * Instantiates a new page util.
	 *
	 * @param str_pagenum the str_pagenum
	 * @param size the size
	 * @param rowCount the row count
	 */
	public PageUtil(String str_pagenum,int size,int rowCount) {
		this.pagenum = 1;
		if(str_pagenum != null && !"".equals(str_pagenum)){
			this.pagenum = Integer.parseInt(str_pagenum);
		}
		this.size = size;
		this.rowCount = rowCount;
		this.pageCount = (int) Math.ceil((double)this.size/this.rowCount);
		this.last = this.pageCount;
		
		this.pagenum = Math.min(this.last, this.pagenum);
		this.pagenum = Math.max(this.first, this.pagenum);
		
		this.prev = Math.max(this.first, this.pagenum - 1);
		this.next = Math.min(this.last, this.pagenum + 1);
		
		this.startRow = (this.pagenum - 1)*this.rowCount;
		
		this.start = Math.max(this.pagenum - this.pagenumCount / 2, this.first);
		
		this.end = Math.min(this.start + this.pagenumCount, this.last);
		
		if(this.end - this.start < 6){
			this.start = Math.max(this.end - this.pagenumCount , this.first);
		}
		
	}
	
	/**
	 * Gets the 查出的总记录数.
	 *
	 * @return the 查出的总记录数
	 */
	public int getSize() {
		return size;
	}
	
	/**
	 * Sets the 查出的总记录数.
	 *
	 * @param size the new 查出的总记录数
	 */
	public void setSize(int size) {
		this.size = size;
	}
	
	/**
	 * Gets the 每页显示多少条记录.
	 *
	 * @return the 每页显示多少条记录
	 */
	public int getRowCount() {
		return rowCount;
	}
	
	/**
	 * Sets the 每页显示多少条记录.
	 *
	 * @param rowCount the new 每页显示多少条记录
	 */
	public void setRowCount(int rowCount) {
		this.rowCount = rowCount;
	}
	
	/**
	 * Gets the 总页数.
	 *
	 * @return the 总页数
	 */
	public int getPageCount() {
		return pageCount;
	}
	
	/**
	 * Sets the 总页数.
	 *
	 * @param pageCount the new 总页数
	 */
	public void setPageCount(int pageCount) {
		this.pageCount = pageCount;
	}
	
	/**
	 * Gets the 首页页号.
	 *
	 * @return the 首页页号
	 */
	public int getFirst() {
		return first;
	}
	
	/**
	 * Sets the 首页页号.
	 *
	 * @param first the new 首页页号
	 */
	public void setFirst(int first) {
		this.first = first;
	}
	
	/**
	 * Gets the 末页页号.
	 *
	 * @return the 末页页号
	 */
	public int getLast() {
		return last;
	}
	
	/**
	 * Sets the 末页页号.
	 *
	 * @param last the new 末页页号
	 */
	public void setLast(int last) {
		this.last = last;
	}
	
	/**
	 * Gets the 前一页页号.
	 *
	 * @return the 前一页页号
	 */
	public int getPrev() {
		return prev;
	}
	
	/**
	 * Sets the 前一页页号.
	 *
	 * @param prev the new 前一页页号
	 */
	public void setPrev(int prev) {
		this.prev = prev;
	}
	
	/**
	 * Gets the 后一页页号.
	 *
	 * @return the 后一页页号
	 */
	public int getNext() {
		return next;
	}
	
	/**
	 * Sets the 后一页页号.
	 *
	 * @param next the new 后一页页号
	 */
	public void setNext(int next) {
		this.next = next;
	}
	
	/**
	 * Gets the 当前页查询时的起始记录数.
	 *
	 * @return the 当前页查询时的起始记录数
	 */
	public int getStartRow() {
		return startRow;
	}
	
	/**
	 * Sets the 当前页查询时的起始记录数.
	 *
	 * @param startRow the new 当前页查询时的起始记录数
	 */
	public void setStartRow(int startRow) {
		this.startRow = startRow;
	}
	
	/**
	 * Gets the 页面上显示出来的页号的起始页号.
	 *
	 * @return the 页面上显示出来的页号的起始页号
	 */
	public int getStart() {
		return start;
	}
	
	/**
	 * Sets the 页面上显示出来的页号的起始页号.
	 *
	 * @param start the new 页面上显示出来的页号的起始页号
	 */
	public void setStart(int start) {
		this.start = start;
	}
	
	/**
	 * Gets the 页面上显示出来的页号的最后页号.
	 *
	 * @return the 页面上显示出来的页号的最后页号
	 */
	public int getEnd() {
		return end;
	}
	
	/**
	 * Sets the 页面上显示出来的页号的最后页号.
	 *
	 * @param end the new 页面上显示出来的页号的最后页号
	 */
	public void setEnd(int end) {
		this.end = end;
	}

	/**
	 * Gets the 当前页号.
	 *
	 * @return the 当前页号
	 */
	public int getPagenum() {
		return pagenum;
	}

	/**
	 * Sets the 当前页号.
	 *
	 * @param pagenum the new 当前页号
	 */
	public void setPagenum(int pagenum) {
		this.pagenum = pagenum;
	}

	/**
	 * Gets the 每页显示出来的有几个页号.
	 *
	 * @return the 每页显示出来的有几个页号
	 */
	public int getPagenumCount() {
		return pagenumCount;
	}

	/**
	 * Sets the 每页显示出来的有几个页号.
	 *
	 * @param pagenumCount the new 每页显示出来的有几个页号
	 */
	public void setPagenumCount(int pagenumCount) {
		this.pagenumCount = pagenumCount;
	}

}
